
package rhplus.sistema;

import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import rhplus.acessoBD.PMF;

@PersistenceCapable
public class Empresa {

    // Atributos
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id_empresa;
    @Persistent
    private int numero_de_empresa;
    @Persistent
    private String designacao;
    @Persistent
    private int nif;
    @Persistent
    private int nib;
    @Persistent
    private String email;
    @Persistent
    private int telefone;
    @Persistent
    private int telemovel;
    @Persistent
    private String morada;


    private Long id_codigo_postal;

    /** Creates a new instance of Empresa */
    public Empresa(final int numero_de_empresa, final String designacao, final int nif, final int nib, final String email,
            final int telefone, final int telemovel, final String morada, final Long codigo_postal) {

        this.numero_de_empresa = numero_de_empresa;
        this.designacao = designacao;
        this.nif = nif;
        this.nib = nib;
        this.email = email;
        this.telefone = telefone;
        this.telemovel = telemovel;
        this.morada = morada;
        this.id_codigo_postal = codigo_postal;
    }

    public Long getIdEmpresa() {
        return id_empresa;
    }

    public int getNumeroDeEmpresa() {
        return numero_de_empresa;
    }

    public void setNumeroDeEmpresa(final int numero_de_empresa) {
        this.numero_de_empresa = numero_de_empresa;
    }

    public String getDesignacao() {
        return designacao;
    }

    public void setDesignacao(final String designacao) {
        this.designacao = designacao;
    }

    public int getNIF() {
        return nif;
    }

    public void setNIF(final int nif) {
        this.nif = nif;
    }

    public int getNIB() {
        return nib;
    }

    public void setNIB(final int nib) {
        this.nib = nib;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(final String email) {
        this.email = email;
    }

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(final int telefone) {
        this.telefone = telefone;
    }

    public int getTelemovel() {
        return telemovel;
    }

    public void setTelemovel(final int telemovel) {
        this.telemovel = telemovel;
    }

    public String getMorada() {
        return morada;
    }

    public void setMorada(final String morada) {
        this.morada = morada;
    }

    public Long getCodigoPostal() {
        return id_codigo_postal;
    }

    public void setCodigoPostal(final Long codigo_postal) {
        this.id_codigo_postal = codigo_postal;
    }

    public static Empresa devolve(final Long id_empresa) {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Empresa.class.getName()
                + " where id_empresa == " + id_empresa;

        Empresa empresa = (Empresa) pm.newQuery(query).execute();


        return empresa;

    }

    public static List<Empresa> devolveTodas() throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Empresa.class.getName();

        List<Empresa> lista_de_empresas = (List<Empresa>) pm.newQuery(query).execute();

        return lista_de_empresas;

    }

    public static void insere(final Empresa empresa) {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.makePersistent(empresa);
        } finally {
            pm.close();
        }

    }

    public static void altera(Empresa empresa) throws ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        int numero_de_empresa = empresa.getNumeroDeEmpresa();
        String designacao = empresa.getDesignacao();
        int nif = empresa.getNIF();
        int nib = empresa.getNIB();
        String email = empresa.getEmail();
        int telefone = empresa.getTelefone();
        int telemovel = empresa.getTelemovel();
        String morada = empresa.getMorada();
        Long codigo_postal = empresa.getCodigoPostal();

        try {
            pm.currentTransaction().begin();

            empresa = pm.getObjectById(Empresa.class, empresa.getIdEmpresa());

            empresa.setNumeroDeEmpresa(numero_de_empresa);
            empresa.setDesignacao(designacao);
            empresa.setNIF(nif);
            empresa.setNIB(nib);
            empresa.setEmail(email);
            empresa.setTelefone(telefone);
            empresa.setTelemovel(telemovel);
            empresa.setMorada(morada);
            empresa.setCodigoPostal(codigo_postal);
            pm.makePersistent(empresa);
            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }


    }

    public void setAll(Empresa emp) {
        this.id_codigo_postal = emp.getCodigoPostal();
        this.designacao = emp.getDesignacao();
        this.email = emp.getEmail();
        this.morada = emp.getMorada();
        this.nib = emp.getNIB();
        this.nif = emp.getNIF();
        this.numero_de_empresa = emp.getNumeroDeEmpresa();
        this.telefone = emp.getTelefone();
        this.telemovel = emp.getTelemovel();
    }

    public static void remove(final Long id_empresa) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.currentTransaction().begin();

            // We don't have a reference to the selected Product.
            // So we have to look it up first,
            Empresa empresa = pm.getObjectById(Empresa.class, id_empresa);
            pm.deletePersistent(empresa);

            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }

    }

    @Override
    public String toString() {
        return id_empresa + ";" + numero_de_empresa + ";" + designacao + ";" + nif + ";" + nib + ";" + nif + ";" + email + ";" + telefone + ";"
                + telemovel + ";" + morada + ";" + id_codigo_postal + ";";
    }
}
